/**
 * 方括号运算符
 */

/**
 * 实际应用
 * 1. 获取对象类型对应键的值的类型 T[K]
 * 2. 获取数组元素的类型 T[number]
 * 3. 获取数组的长度 T['length'] 还可以提供具体的值 T[0]
 * 4. 结合keyof 获取对象类型属性值的类型 T[keyof T]
 * 5. 结合泛型使用扩展运算符 [...T]
 */

type Person = {
  name: string;
  age: number;
  sex: "男" | "女";
};
type Name = Person["name"]; // string
type Age = Person["age"]; // number
type ObjValueType = Person["name" | "sex"]; // string

// 作为下标去使用[]
const arr: string[] = ["1", "2", "3"];
type ArrValueType = (typeof arr)[number]; // string

// 获取元祖类型中的每一个元素类型 [number]
const roles: [string, number, boolean] = ["admin", 1, true];

type TupleType2 = (typeof roles)[number]; // string | number | boolean

// 1. 方括号运算符
type ValueType = Person["sex" | "age"]; // string | number

export {};
